package com.springBootStudy.spring_aoc.addLogDemo;

/**
 * @ program: elasticSearch_springBoot_study
 * @ description:
 * @ author: Mr.Zhongsf
 * @ create: 2021-03-10 14:02
 **/

    //业务还是service的业务
    //使用代理去增加功能,不用修改原先的类,可以代理的类很灵活

    //代码步骤 4个角色
    //1.接口  UserService
    //2.真实角色  UserServiceImpl
    //3.代理角色   UserServiceProxy
    //4.客户端访问代理角色 Client

import org.springframework.stereotype.Service;

/**
    动态代理和静态角色一样，动态代理底层是反射机制

    动态代理类是动态生成的，不是我们直接写好的！

    动态代理(两大类)：基于接口，基于类

    - 基于接口：JDK的动态代理【使用ing】
    - 基于类：cglib
    - java字节码实现：javasisit

    了解两个类
    1、Proxy：代理
    2、InvocationHandler：调用处理程序
 */
@Service
public class UserServiceProxy implements UserService{
    private UserServiceImpl userService;

    public UserServiceImpl getUserService() {
        return userService;
    }

    public void setUserService(UserServiceImpl userService) {
        this.userService = userService;
    }

    @Override
    public void add() {
        log("add");
        userService.add();

    }

    @Override
    public void delete() {
        log("delete");
        userService.delete();
    }

    @Override
    public void update() {
        log("update");
        userService.update();
    }

    @Override
    public void query() {
        log("query");
        userService.query();
    }

    //日志方法
    public void log(String string){
        System.out.println("代理使用了"+string+"方法");
    }
}
